package com.uncp.comisiondeadmision.controlador;

import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import com.uncp.comisiondeadmision.utils.Constantes;
import com.uncp.comisiondeadmision.utils.Util;

@ManagedBean
@SessionScoped
public abstract class CGenericController {

	/** Contexto de JSF (contiene request, response, etc.) */
	FacesContext context;

	/**
	 * Referencia al FacesMessage
	 */
	FacesMessage msg;

	/**
	 * Referencia al Contexto para obtener la ubicacion actual
	 */
	ExternalContext extContext = FacesContext.getCurrentInstance()
			.getExternalContext();

	/**
	 * Metodo donde se obtienen los nombre de los properties
	 * 
	 * @param property
	 *            Nombre del Property a obtener
	 */
	public String obtenerProperty(String property) {
		System.out.println("CGenericController - obtenerProperty");
		String text = Util.getMessageResourceString(property,
				Constantes.MENSAJENOENCONTRADO, Constantes.UBICACIONMENSAJES);
		return text;
	}

	/**
	 * Metodo que verificara los Datos Ingresados antes de guardar
	 * @throws Exception 
	 */

	public abstract boolean antesDeGuardar() throws Exception;

	/**
	 * Metodo que se encargara de realizar transacciones que se necesiten
	 * despues de guardar
	 * @throws Exception 
	 */

	public abstract void despuesDeGuardar() throws Exception;

	/**
	 * Metodo Encargado de Inicializar los Controles. Necesario por trabajar con
	 * Session.
	 * 
	 * @return retorna nulo para que no halla problemas en la vizualizacion dado
	 *         que lo traduce con un espacio
	 */

	public abstract String getInicializarControles();

	/**
	 * Agrega mensaje al Formulario Usando el FacesMessage.
	 * 
	 * @param tipoMensaje
	 *            El tipo de mensaje que ofrece el FacesMessage
	 * @param mensaje
	 *            El mensaje a mostrar en el formulario
	 * @param detalle
	 *            El detalle del mensaje
	 */
	@SuppressWarnings("static-access")
	public void addFacesMessage(Severity tipoMensaje, String mensaje,
			String detalle) {

		msg = new FacesMessage(tipoMensaje, mensaje, detalle);

		context.getCurrentInstance().addMessage(null, msg);

	}

}
